package nige.jar.classe.fenetre;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.Vector;

import javax.swing.JTextField;

import nige.jar.classe.JarFound;
import nige.jar.classe.Principale;

/**
 * Classe qui realise l action de la fenetre principale
 * @author Nicolas Genevaux
 * 
 * DEPTH  1
 *       Object
 * CALLEE  3
 *       Fenetre
 *       JarFound
 *       Principale
 * 
 * 14-02-2008   Nicolas Genevaux      v.0.0.1
 * 15-02-2008   Nicolas Genevaux      v.0.0.2
 */
public class FenetreAction {
  
  /**
   * Fonction qui traite les evenements
   * @param fen Fenetre cible
   * @param e Evenement a traiter
   */
  public void evenement(Fenetre fen, ActionEvent e) {
    if(e.getActionCommand()!=null) {
      if(e.getActionCommand().equals("Start")) {
        startPerform(fen);
      }
      else if(e.getActionCommand().equals("Stop")) {
        fen.getPr().arret();
      }
    }
    else {
      if(!fen.getPr().isAlive()) {
        fen.affichageResult = 0;
        fen.getT().stop();
        fen.getSource().setBackground(Color.white);
        fen.getSource().setEnabled(true);
        fen.getCible().setBackground(Color.white);
        fen.getCible().setEnabled(true);
        fen.getSourceButton().setEnabled(false);
        fen.getStartButton().setEnabled(true);
        fen.getStartButton().setText("Start");
      }
      else {
        fen.getSourceButton().setEnabled(true);
        fen.getDossierAnalyse().setText(fen.getJf().
            getDossierAnalyse()+
            " dossier(s) analyse(s)");
        fen.getFichierAnalyse().setText(fen.getJf().
            getFichierTotal()+
            " fichier(s) analyse(s)");
        fen.getJarFileAnalyse().setText(fen.getJf().
            getJarTotal()+
            " jar(s) analyse(s)");
        fen.getClasseJAnalyse().setText(fen.getJf().
            getClasseTotal()+
            " classe(s) analyse(s)");
        fen.getLog().setText(fen.getPr().getLOG());
        while(fen.affichageResult<fen.getJf().getAllJars().size()) {
          loopsAlivePerform(fen.affichageResult,fen);
          fen.affichageResult++;
        }
        fen.getLogs().setBounds(10,260,270,25*fen.getJf().
            getAllJars().size()+20);
        fen.getPanneauPrincipal().
          setPreferredSize(new Dimension(270,480+25*fen.getJf().
              getAllJars().size()));
      }
    }
  }

  /**
  * Boucle d'appel tant qu'il y a des fichier jar a afficher
  * @param i Iteration
  * @param fen Fenetre principale
  */
  public static void loopsAlivePerform(int i,Fenetre fen) {
    JTextField tLog = new JTextField(
        fen.getJf().getAllJars().
        get(i).toString());
    tLog.setPreferredSize(
        new Dimension(250,20));
    tLog.setCursor(new Cursor(Cursor.
        TEXT_CURSOR));
    fen.getLogs().add(tLog);
    tLog.select(tLog.getText().length()-1,
        tLog.getText().length());
  }

  /**
  * Fonction a realiser si le bouton start a ete appuye
  * @param fen Fenetre principale
  */
  public static void startPerform(Fenetre fen) {
    fen.setJf(new JarFound());
    if((new File(fen.getSource().getText())).isDirectory()) {
      fen.setPr(new Principale(fen.getSource().getText(),
          fen.getCible().getText(),fen.getJf()));
      fen.getPr().start();
      fen.getJf().setAllJars(new Vector<Object>(0));
      fen.getT().start();
      fen.getSource().setBackground(Color.lightGray);
      fen.getSource().setEnabled(false);
      fen.getCible().setBackground(Color.lightGray);
      fen.getCible().setEnabled(false);
      fen.getSourceButton().setEnabled(false);
      fen.getStartButton().setEnabled(false);
      fen.getStartButton().setText("Calcul");
      fen.getSourceButton().setEnabled(true);
    }
    else {
      fen.getLog().setText(fen.getSource().getText()+
          " n'est pas un repertoire !!");
    }
    fen.getLogs().removeAll();
    fen.getLogs().setBounds(10,260,270,60);
    fen.getPanneauPrincipal().setPreferredSize(
        new Dimension(100,100));
    String logGenere = "Aucune classe trouvee"; 
    fen.getLog().setText(logGenere);
  }
}

